/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: mac
 * Date: 2022-08-16
 * Time: 9:24
 */

public class MethodDemo {
    //1.方法：C函数是一个意思。方法/函数->重复使用的
    //2.基本形式：注意main函数位置不管在哪都行

    /*public static void fun(int n){
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        //return;
        System.out.println(sum);
    }*/

    /**
     * 求1-n的和
     * 函数名字：小驼峰
     * @param n 输入的一个数字
     * @return 求的和
     */

    public static int sumAdd(int n){
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }

    /**
     * 求某个数字的阶乘
     * @param n 5！= 1*2*3*4*5
     * @return 阶乘
     */
    public static int fac(int n){
        int ret = 1;
        for (int i = 1; i <= n; i++) {
            ret *= i;
        }
        return ret;
    }

    /**
     * 求阶乘的和
     * @param n
     * @return
     */
    public static int facSum(int n){
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += fac(i);
        }
        return sum;
    }

    public static void swap(int a, int b){
        int tmp = a;
        a = b;
        b = tmp;
    }
    public static void main1(String[] args) {
        /*//方法的调用 - 注意传参匹配《参数类型，参数个数》
        int ret = sumAdd(10);//实际参数 - 按值传递
        System.out.println(ret);

        System.out.println(sumAdd(10) * 2);
        //System.out.println(fun(11)); - 报错 - 无返回值

        //int ret = fun(10) * 2;//不行*/

       /* int n = 10;
        int ret = facSum(5);
        System.out.println(ret);*/

        //3-java中是拿不到栈上地址的，故无法实现传址调用
        //如果硬要实现，只能把a，b的值放到堆上
        int a = 10;
        int b = 20;
        System.out.println("交换前："+a+" " +b);
        /*int tmp = a;
        a = b;
        b = tmp;*/
        swap(a, b);
        System.out.println("交换后："+a+" " +b);
    }
    //函数开辟的内存-》栈帧：每个函数在调用时都会开辟栈帧

    //重载：overload
    //1.方法名要相同
    //2.方法的参数列表不同（个数类型）
    //3.方法的返回值不做要求
    //4.重载不一定需要同一个类 - 继承关系也可

    //那是怎么识别的呢？ - 每个方法都有一个签名可识别
    public static int add(int a, int b){
        return a + b;
    }
    public static  double add(double a, double b){
        return a + b;
    }
    public static  int add(int a, int b ,int c){
        return a + b + c;
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(add(a, b));

        double d1 = 10.3;
        double d2 = 10.4;
        System.out.println(add(d1, d2));
    }
}
























